
import java.util.Date;
import java.text.SimpleDateFormat;

class EnvioVagaController {

    EnvioVagaService envioVagaService;
    //MailService mailService;

    /*
    * Closure responsável pelo envio do curriculo do estagiario para a vaga.
    * Verifica se o estagiário já se cadastrou para a vaga.
    * Verifica se a vaga é compatível com a formação do estagiário.
    */
    def enviarCurriculo = {
        if(!verificaLogon()){
            return;
        }
        // instancia as classes
        def vagaInstance       = Vaga.findById(params.vaga.id);
        def estagiarioInstance = Estagiario.findById(params.estagiario.id);
        // verifica se o estagiário tem formacao.
        if(envioVagaService.possuiFormacao(estagiarioInstance)){
            // Verifica se já tem cadastro para vaga.
            if(!envioVagaService.curriculoJaEnviado(vagaInstance, estagiarioInstance)){
                // Verifica se a carga horária é compativel com a formação.
                if(envioVagaService.verificaCargaHorariaFormacao(vagaInstance, estagiarioInstance)){
                    // verifica se o estagiário tem o mesmo perfil(curso) da vaga;
                    if(envioVagaService.possuiPerfilVaga(vagaInstance, estagiarioInstance)){
                        // Formata os dados.
                        Date data = new Date();
                        SimpleDateFormat formatador  = new SimpleDateFormat('dd/MM/yyyy hh:MM:ss');
                        def envioVagaInstance        = new EnvioVaga();
                        envioVagaInstance.vaga       = Vaga.findById(params.vaga.id);
                        envioVagaInstance.estagiario = Estagiario.findById(params.estagiario.id);
                        envioVagaInstance.dtEnvio    = Date.parse('dd/MM/yyyy hh:MM:ss',formatador.format(data));

                        // Registra o envio do curriculo.
                        if (envioVagaInstance.save()) {
                            //mailService.send('Curriculo enviado', '<html><body><h1>ESTAGIARIO</h1></body></html>', 'andre_stein@sinos.net');
                            //mailService.send('Curriculo recebido', '<html><body><h1>EMPRESA</h1></body></html>', 'andre_stein@sinos.net');
                            flash.message = "Curriculo enviado com sucesso!";
                            redirect(controller:'vaga', action:"enviaVaga", id:vagaInstance.id);
                        }else {
                            flash.message = "Não foi possível enviar o curriculo.";
                            redirect(controller:'vaga', action:"enviaVaga", id:vagaInstance.id);
                        }

                    }else{
                        flash.message = "Seu perfil não é compatível com a vaga.";
                        redirect(controller:'vaga', action:"enviaVaga", id:vagaInstance.id);
                    }
                }else{
                    flash.message = "A carga horária não é compatível com a sua formação.<br/> Alunos com formação EJA só podem trabalhar 20h semanais.";
                    redirect(controller:'vaga', action:"enviaVaga", id:vagaInstance.id);
                }
            }else{
                flash.message = "Você já enviou curriculo para esta vaga.";
                redirect(controller:'vaga', action:"enviaVaga", id:vagaInstance.id);
            }
        }else{
            flash.message = "Você precisa ter formação para enviar o curriculo.";
            redirect(controller:'vaga', action:"enviaVaga", id:vagaInstance.id);
        }

    }

    /*
     * NÂO ESTA SENDO UTILIZADO, OS ENVIOS NÃO SÃO EXCLUIDOS.
     * Closure que exclui o curriculo enviado para a vaga.
     * Só pode ser excluído se não tiver solicitação gerada.
     */
    def excluirEnvioCurriculo = {
        if(!verificaLogon()){
            return;
        }
        // Carrega os dados do envio do curriculo para a vaga.
        def envioVagaInstance = EnvioVaga.get(params.id);
        Estagiario estagiario = Estagiario.findById(envioVagaInstance.estagiario.id);
        Vaga vaga = Vaga.findById(envioVagaInstance.vaga.id)
        // Verifica se já existe solicitação para o curriculo enviado.
        if(!envioVagaService.possuiSolicitacaoVaga(estagiario, vaga)){
            envioVagaInstance.delete()
            flash.message = "Curriculo excluído com sucesso.";
            redirect(controller:'vaga', action:'edit', id:envioVagaInstance.vaga.id);

        }else{
            flash.message = "Não é possível excluir o curriculo. Já existe um solicitação.";
            redirect(controller:'vaga', action:'edit', id:envioVagaInstance.vaga.id);
        }
    }

    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }

}
